<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
</html>

<script>
  // ### 函数定义阶段
  // ​	1. 定义阶段就是我们把代码 放在盒子里面
  // ​	2. 我们就要学习怎么 放进去，也就是书写一个函数
  // ​	3. 声明（定义）一个完整函数包括关键字、函数名、形式参数、函数体、返回值5个部分
  // ​	4. 我们有两种定义方式 声明式 和 赋值式
  // ​	5. 函数名的命名规则与变量是一致的，并且尽量保证函数名的语义。



  // 函数的定义(创建)

  // 1. 声明式函数语法
  // function 函数名() {
  // 函数体
  // 函数体就是需要完成某一个功能的一段代码
  // }

  // function: 声明函数的关键字，表示接下来是一个函数了
  // fn: 函数的名字，我们自己定义的（遵循变量名的命名规则和命名规范）
  // (): 必须写，是用来放参数的位置（一会我们再聊）
  // {}: 就是我们用来放一段代码的位置（也就是我们刚才说的 “盒子”）

  // 一个画9*9的表格的函数就完成了
  // function drawTable() {
  //   document.write("<table border='1'>");
  //   for (var i = 1; i <= 9; i++) {
  //     document.write("<tr>")
  //     for (var j = 1; j <= 9; j++) {
  //         document.write("<td>123</td>")
  //       }
  //       document.write("</tr>")
  //     }
  //   document.write("</table>");
  // }
  // drawTable();

  





  // 2. 赋值式函数
  // 右边也叫匿名函数
  // 语法： var fn = function() {}
  // var drawTable2 = function() {
  //   document.write("<table border='1'>");
  //   for (var i = 1; i <= 9; i++) {
  //     document.write("<tr>")
  //     for (var j = 1; j <= 9; j++) {
  //         document.write("<td>123</td>")
  //       }
  //       document.write("</tr>")
  //     }
  //   document.write("</table>");
  // }
  // drawTable2();








  // 声明式函数和赋值式函数的区别
  // 调用的时候都是函数名加括号
  // 声明式的函数 调用可以在 **定义之前或者定义之后**
  // 赋值式函数 调用只能在 **定义之后**


  // fn();
  // function fn() {
  //   console.log("fn");
  // }
  // fn();


  // fn2();
  // var fn2 = function() {
  //   console.log("fn2");
  // }
  // fn2();


  
  // 涉及变量提升，所以fn2是undefined
  // console.log(fn2);
  // 不是函数就不能加括号，所以报错了
  // fn2();
  // var fn2 = function() {
  //   console.log("fn2");
  // }
  // console.log(fn2);


  // 涉及到函数提升
  function fn() {
    console.log("fn");
  }
  var b;
  var a;
  var fn2;

  console.log(123);
  b = 5;
  a = 3;
  fn2 = function() {
    console.log("fn2");
  }
  console.log(456);
</script>